home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swaga_c.zip
/
CRC.SWG
/
0011_XORSUM CRC Method.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-08-27
|
1KB
|
55 lines
{
SEAN PALMER
>> (more than I thought I would have). There were 190 collisions
>> out of 572 names.
>The solution would be to use a better hashing algorythm, simply
>adding up the ascii characters is not unique enough. You best
>approach would be to generate a CRC value for your hashing table
>rather then the checksum approach.
Or try this xorsum method (my own invention, have to plug for it... 8)
Lots faster than a crc with no table, with similar results.
NOT compatible with a crc.
This xorsum algorithm is hereby standardized and if anyone wants to use
it you should make sure your xorsum routines give the same results.
}
function XorSum16(var data; size : word; prevSum : word) : word; assembler;
asm
push ds
lds si, data
mov cx, size
mov bx, prevSum
mov dx, $ABCD
cld
jcxz @X
@L:
lodsb
rol bx, 1
xor bx, dx
xor bl, al
loop @L
@X:
mov ax, bx
pop ds
end;
{ to use on a string, for instance: }
const
s : string = 'this is a test';
begin
writeln(xorsum16(s, length(s) + 1, 0));
end.
{
send 0 as prevSum if you're not accumulating a result...otherwise send
the result from the previous buffer.
}